
/****
 * 
 * 
 * java中：有些接口可能不需要适配，创建接口，中间可以创建抽象类，在具体实现类中直接调用父类方法
 */

/***
 * 接口
 * 
 */
class JsBridege{
    getToken(){
        throw new Error("getToken")
    }
    shareImg(){
        throw new Error("shareImg")
    }
    shareUrl(){
        throw new Error("shareUrl")
    }
    // vibilityCallBack(){}
        
}

class H5JsBridge extends JsBridege{
    getToken(){
        console.log("获取token-h5")
    }
    shareImg(){
        console.log("分享图片-h5")
    }
    shareUrl(){
        console.log("分享链接-h5")
    }
}
/***
 * 
 * 复杂的调用逻辑
 * 各个js不同，判定新老容器
 */
class AppJsBridge extends JsBridege{
    getToken(){
        console.log("获取客户端token")
    }
    shareImg(){
        console.log("分享图片-app")
    }
    shareUrl(){
        console.log("分享链接-app")
    }
}
/**
 * 适配器+代理
 */
class Proxy  extends JsBridege{
    
    constructor(inApp){
        super()
        //目前项目里，可以不传递
        this.inApp = inApp
        // this.appJsBridege = new AppJsBridge()
        // this.h5JsBridge = new H5JsBridge()
        if(inApp){
            this.jsBridge = new AppJsBridge()
        }else{
            this.jsBridge = new H5JsBridge()
        }
    }
    getToken(){
        this.jsBridge.getToken()
        // if(this.inApp){
        //     this.appJsBridege.getToken()
        // }else{  
        //     this.h5JsBridge.getToken()
        // }
    }
    shareImg(){
        this.jsBridge.shareImg()
        // if(this.inApp){
        //     this.appJsBridege.shareImg()
        // }else{
        //     this.h5JsBridge.shareImg()
        // }
    }
    shareUrl(){
        this.jsBridge.shareUrl()
        // if(this.inApp){
        //     this.appJsBridege.shareUrl()
        // }else{
        //     this.h5JsBridge.shareUrl()
        // }
    }
}

const proxy  = new Proxy(0)
proxy.getToken()



